Computer systems are often thought of as extremely complicated devices that represent unfathomable complexity. While this may be true to some extent, those knowledgeable in the computer system field realize that many of the problems that face computer system designers are very similar to problems that face each of us in every day life. Once such problem is that of identifying and finding computer system resources. Just like a person's name is used to look up the person's phone number (e.g., through the use of a phone book), computer system resource names are used to gain access to computer system resources. As an aside, we use the term "computer system resource" here to refer to just about any resource that relates to computer systems. For example, a computer system resource may be as small as a single piece of information that is stored in a computer system or it may be as large as an entire computer system, or network of computer systems.
Continuing the analogy, we all know that more than one person might have the same name. For example, phone books often have multiple entries for common names such as John Smith. When this is the case, we need further information about the particular John Smith (e.g., his street address) to pick out which John Smith to call. Like people, different computer system resources may well have the same name, but they also will usually be identified with certain additional information. This additional information often comes in the form of what is referred to as a unique identifier (UID for short). While there can be several different computer system resources with the same name, there is only one UID for each resource within a given name space. By "name space," we mean the total set of computer system resources that are under consideration. In our example, a name space can be thought of as being analogous to a region for which the phone book is valid.
While the flexibility associated with being able to identify a computer system resource through either a name or a UID can be thought of as an advantage, it has the disadvantage of requiring specialized search mechanisms (i.e., one for name-based searches and one for UID-based searches). The need for specialized search mechanisms means that a UID search mechanism cannot search based on resource name and that a name-based search mechanism cannot search based on a UID. If a resource name is given to a UID search mechanism, the search will fail even though there are resources present with the subject name. Similarly, if a UID is given to a name search mechanism, the search will fail even though the UID accurately identifies a particular resource.
These limitations create two significant problems. First, the need for different search mechanisms means that the entity making the request (i.e., usually an application program) must blindly choose one of the two search mechanisms to perform an initial search. If the initial search fails, the program must attempt the search using the other search mechanism. While one might speculate that a solution to this problem would be to provide the application program with the intelligence to correctly choose which search mechanism to use, it turns out that such an idea would, in practice, be inappropriate because subsequent changes to the name or UID format would require changes to each dependent application program (i.e., instead of just one change to one search mechanism). Thus, application programs are left with this two-phase search approach, which, as one can imagine, is extremely wasteful from the standpoint of overall computer system performance.
The second significant problem with today's mechanisms is the fact that each search mechanism requires the use of a specialized indexing structure. (Indexing structures are used by search mechanisms to perform searches for computer system resources). The use of separate indexing structures is a problem because these structures are typically quite large, which means that they are expensive to house within the computer system's memory.
Without a different approach to name space searching, computer system resource access will continue to suffer from these inadequacies.